草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 迭代器 - vector::iterator 和 array::iterator 的重载函数

我只是想重载某个函数连续容器的迭代器(它们是std::vector::iterator、std::array::iterator和内置数组迭代器==原始指针)可以是有效参数。出于某种原因,我的函数无法针对vector和std::array进行编译:功能:templatevoidcatchIterator(typenamestd::array::iteratorit){//dosomthing}templatevoidcatchIterator(typenamestd::vector::iteratorit){//dosomthing}使用示例:std::arrayarr;autoit=

c++ - 容器迭代器的部分特化失败

这个问题在这里已经有了答案:Whycan'tthetemplateargumentbededucedwhenitisusedastemplateparametertoanothertemplate?(4个答案)Whatisanondeducedcontext?(1个回答)Error:classtemplatepartialspecializationcontainsatemplateparameterthatcannotbededuced(2个答案)Whydoesiteratortypedeductionfail?[duplicate](2个答案)Howtodefineis_itera

c++ - 为什么我需要另一个迭代器作为 std::copy() 中的参数?

我不明白为什么我需要将另一个迭代器作为调用std::copy()以读取文件的第二个参数。迭代器如何结束文件?vectorv;istream_iteratoris(file),end;copy(is,end,back_inserter(v)); 最佳答案 Howisiterator'end'endingofafile?按照惯例和/或标准库中的设计决定。迭代器end是默认构造的,在cppreference上,我们了解默认的std:istream_iterator构造函数:constexpristream_iterator();Const

c++ - 使用模拟测试迭代代码 - 它有意义吗?

我想使用模拟测试算法。该算法-在当前实现中-多次遍历容器类并从中设置()和获取()值。测试的目的是验证存储在容器中的最终结果。最终值取决于遍历之间读取和写入的值。例如在算法完成之前,任何元素的值都可能更改多次,并且最有可能的是,它作为第n次迭代的结果的值将取决于它在第n-1次迭代后的值。我喜欢模拟的想法,我很乐意在上述场景中使用它们,因为它可以让我在算法的错误行为发生时验证它,而不仅仅是在计算完成时。但是,我不确定这是否真的是个好主意,因为我必须将对模拟真实的期望与当前实现联系起来(例如,“期望get(elementn)并返回x,然后设置(元素n,值x+1),另一个get(n)并返回x

c++ - 追加和迭代 QList

我的QList包含指向一个类的指针。我试图遍历QList,但它的所有元素似乎只包含我分配给QList的最后一个指针。代码:QListmyList;fooClass*pNewFooA=newfooClass("Bob");myList.append(pNewFooA);fooClass*pNewFooB=newfooClass("Jen");myList.append(pNewFooB);fooClass*pNewFooC=newfooClass("Mel");myList.append(pNewFooC);QList::iteratori;for(i=myList.begin();i!

c++ - 是否允许标准迭代器操作抛出?

考虑一个标准的迭代器,它需要为遍历数据结构分配内存。如果无法分配内存,标准是否允许迭代器抛出异常?例如,考虑树数据结构的输入迭代器。在这种情况下,要遍历树,您必须添加并维护指向每个节点父节点的指针(这会减慢不需要此类指针的操作,例如在树上插入/删除/查找)或使用堆栈帮助迭代器存储指向遍历节点的指针。在这种情况下,在推进堆栈的同时,堆栈可能会增长,直到没有更多的可用内存并且迭代器被迫抛出。 最佳答案 是的,允许C++中的迭代器方法抛出异常,正如您所指出的,在某些情况下可以抛出异常。C++中唯一不能抛出异常的函数是析构函数。实际上这只是

c++ - 底层集合的抽象迭代器

所以基本上我想做的是让一个纯虚拟方法返回一个迭代器到一个具体类型的任意集合,例如在伪代码中:virtualIteratorgetIterator()const=0;这个类的使用者实际上并不关心子类使用什么实现。它可以是集合、vector、列表、数组等。我知道std::iterator类,但我找不到正确指定它以便使用简单vector的方法。virtualstd::iteratorgetIterator()const=0;myVector.begin()//compilationerrorinimplementation定义std::iterator与constT因为类型参数也不起作用。我

c++ - 搜索/迭代 boost::spirit::qi::symbols

如果我有一个符号表:structMySymbols:symbols{MySymbols():symbols(std::string("MySymbols")){add("apple",MyEnum::Apple)("orange",MyEnum::Orange);}};我想遍历表格以便按数据值搜索交易品种。我不能使用lambda表达式,所以我实现了一个简单的类:templatestructSymbolSearcher{SymbolSearcher::SymbolSearcher(TsearchFor):_sought(searchFor){//donothing}voidoperato

C++ 迭代器和反向迭代器

我正在为当前对象编写一个iterator(实际上它是const_iterator,我还想创建一个reverse_const_iterator。我环顾四周,看看如何做到这一点,我偶然发现了this:Noticehoweverthatwhenaniteratorisreversed,thereversedversiondoesnotpointtothesameelementintherange,buttotheoneprecedingit.Thisisso,inordertoarrangeforthepast-the-endelementofarange:Aniteratorpointin

c++ - 在嵌套的基于范围的 for 循环中使用自动(用于迭代)

目前我已经开始使用auto关键字。我对此有一些疑问:如果我需要遍历vector我会这样做:vectorv;for(autoit:v){cout但是假设我需要做这样的事情:vectorv;for(autoit:v){for(autojt:X){//whereXisnextpositionofit'sposition//WhatImeanisifitiscurrentlyat2ndpositionthen//jtiteratorwillstartfrom3rdposition}}我完全不知道该怎么做。请建议什么是合适的方法。提前致谢。 最佳答案